package SwordOffer2;

import java.util.HashMap;

public class day5_1 {
    /*
     * 双指针，HashMap，滑动窗口
     * 1.判断s1与s2长度，若s1长度大于s2长度，返回false
     * 2.创建两个HashMap，map1，map2；分别记录s1，s2的移动数组，(key，value)为(字母，字母重复次数)
     * 3.创建两个指针left，right构造滑动窗口，使窗口长度为s1长度，判断map1与map2包含(key，value)是否一致；
     *  若一致返回ture，若不一致left，right右移，map2更新，添加right值或map2中right的value值加1，移除left值或者map2中left的value值减1
     * 4.当res=true时或right=s2.length时退出循环，返回res。
     */

    public boolean checkInclusion(String s1, String s2) {
        boolean res = false;
        if (s1.length() > s2.length()) {
            return res;
        }
        HashMap<Character, Integer> map1 = new HashMap<>();
        HashMap<Character, Integer> map2 = new HashMap<>();
        for (int i = 0; i < s1.length(); i++) {
            if (map1.containsKey(s1.charAt(i))) {
                map1.put(s1.charAt(i), map1.get(s1.charAt(i)) + 1);
            } else {
                map1.put(s1.charAt(i), 1);
            }
            if (map2.containsKey(s2.charAt(i))) {
                map2.put(s2.charAt(i), map2.get(s2.charAt(i)) + 1);
            } else {
                map2.put(s2.charAt(i), 1);
            }
        }
        int left = 0;
        for (int right = s1.length(); right < s2.length(); right++) {
            if (map1.equals(map2)) {
                res = true;
            }
            if (map2.containsKey(s2.charAt(right))) {
                map2.put(s2.charAt(right), map2.get(s2.charAt(right)) + 1);
            } else {
                map2.put(s2.charAt(right), 1);
            }
            for (char c : map2.keySet()) {
                System.out.print("key " + c + " value " + map2.get(c));
            }
            System.out.println();
            if (res) {
                break;
            }
            if (map2.get(s2.charAt(left)) > 1) {
                map2.put(s2.charAt(left), map2.get(s2.charAt(left)) - 1);
            } else {
                map2.remove(s2.charAt(left));
            }
            left++;
        }
        if (map1.equals(map2)) {
            res = true;
        }
        return res;
    }
}
